<?php

namespace app\index\controller;

use app\index\model\Msg;
use app\service\EpayCore;
use app\service\Score;
use think\facade\Db;

class Pay extends Base
{
    // public function codePay()
    // {
    //     $codepay_id = "1461"; //这里改成码支付ID
    //     $codepay_key = "iwbl2hACR0eMMz2FH08w6zZCoPGdBQiB"; //这是您的通讯密钥
    //     $data = array(
    //         "id" => $codepay_id, //你的码支付ID
    //         "pay_id" => $codepay_id, //唯一标识 可以是用户ID,用户名,session_id(),订单ID,ip 付款后返回
    //         "type" => 1, //1支付宝支付 3微信支付
    //         "price" => 100, //金额100元
    //         "param" => "", //自定义参数
    //         "notify_url" => "", //通知地址
    //         "return_url" => "http://sober.com/index/epayApi/return_url", //跳转地址
    //     ); //构造需要传递的参数
    //     //页面跳转同步通知页面路径
    //     ksort($data); //重新排序$data数组
    //     reset($data); //内部指针指向数组中的第一个元素
    //     $sign = ''; //初始化需要签名的字符为空
    //     $urls = ''; //初始化URL参数为空

    //     foreach ($data as $key => $val) { //遍历需要传递的参数
    //         if ($val == '' || $key == 'sign') continue; //跳过这些不参数签名
    //         if ($sign != '') { //后面追加&拼接URL
    //             $sign .= "&";
    //             $urls .= "&";
    //         }
    //         $sign .= "$key=$val"; //拼接为url参数形式
    //         $urls .= "$key=" . urlencode($val); //拼接为url参数形式并URL编码参数值

    //     }
    //     $query = $urls . '&sign=' . md5($sign . $codepay_key); //创建订单所需的参数
    //     $url = "https://code.ymyu.cn/creat_order/?{$query}"; //支付页面
    //     header("Location:{$url}"); //跳转到支付页面
    // }
    public function config()
    {
        $type = config('system.pay.payType');
        // 易支付
        $epay_config['apiurl'] = config('system.pay.payApi');
        //商户ID
        $epay_config['pid'] =   config('system.pay.payPid');
        //商户密钥
        $epay_config['key'] =  config('system.pay.payKey');

        return $epay_config;
    }

    public function epayApi()
    {
        $epay_config = $this->config();
        if($epay_config['apiurl'] == '' || $epay_config['pid'] == '' ||  $epay_config['key']  == '') return view('error/404', ['msg' => '支付配置异常，请联系管理处理']);
        $host = Request()->host();
        $notify_url = "http://{$host}/index/pay/notify_url";
        //需http://格式的完整路径，不能加?id=123这类自定义参数
        //页面跳转同步通知页面路径
        $return_url = "http://{$host}/index/pay/return_url";
        //需http://格式的完整路径，不能加?id=123这类自定义参数
        //商户订单号
        // $out_trade_no = intval($_POST['WIDout_trade_no']);
        $out_trade_no = intval(date("YmdHis") . mt_rand(100, 999));
        //商户网站订单系统中唯一订单号，必填
        //支付方式（可传入alipay,wxpay,qqpay,bank,jdpay）
        $type = $_POST['type'];
        //商品名称
        // $name = $_POST['name'];
        //付款金额
        // $money = $_POST['WIDtotal_fee'];
        $scoreType = $_POST['score'];
        switch ($scoreType) {
            case 1:
                $money = 1;
                $score = 100;
                $name = '积分 * 100';

                break;
            case 2:
                $money = 3;
                $score = 500;
                $name = '积分 * 500';
                break;
            case 3:
                $money = 5;
                $score = 1000;
                $name = '积分 * 1000';
                break;
        }
        //构造要请求的参数数组，无需改动
        $parameter = array(
            "pid" => $epay_config['pid'],
            "type" => $type,
            "notify_url" => $notify_url,
            "return_url" => $return_url,
            "out_trade_no" => $out_trade_no,
            "name" => $name,
            "money"    => $money,
        );
        //建立请求
        $epay = new EpayCore($epay_config);
        $html_text = $epay->pagePay($parameter);
        $param = ['user_id' => $this->user['user_id'], 'good_name' => $name, 'score' => $score, 'pay_type' => $type,  'out_trade_no' => $out_trade_no, 'money' => $money, 'ip' => Request()->ip(), 'status' => 0, 'create_time' => time()];
        Db::name('tradeOrder')->insert($param);
        // echo $html_text;
        return view('epayApi', ['result' => $html_text]);
    }
    public function notify_url()
    {
        $epay_config = $this->config();
        //计算得出通知验证结果
        $epay = new EpayCore($epay_config);
        $verify_result = $epay->verifyNotify();
        $uid = $this->user['user_id'];
        if ($verify_result) { //验证成功
            //商户订单号
            $out_trade_no = $_GET['out_trade_no'];
            //彩虹易支付交易号
            $trade_no = $_GET['trade_no'];

            //交易状态
            $trade_status = $_GET['trade_status'];
            //支付方式
            $type = $_GET['type'];
            //支付金额
            $money = $_GET['money'];
            $payStatus = $epay->orderStatus($trade_no);
            if ($payStatus) {
                $order =  Db::name('tradeOrder')->where('out_trade_no', $out_trade_no)->find();
                if ($order['status'] == 0) {
                    Db::name('tradeOrder')->where('out_trade_no', $out_trade_no)->update(['status' =>  1, 'trade_no' => $trade_no]);
                    $score = $order['score'];
                    $msg = "购买积分 * $score 成功 ，积分已发放到你的账户，感谢您的支持！";
                    Msg::send(0, $uid, $msg);
                    // 积分添加操作 
                    Score::add($uid, $score);
                } else if ($order['status'] == 1) {
                    $msg = '无需重复提交订单';
                } else {
                    $msg = '订单不存在或已过期';
                }
            } else {
                Db::name('tradeOrder')->where('out_trade_no', $out_trade_no)->update(['status' => 3, 'trade_no' => $trade_no]);
                $msg = '验证失败';
            }
            //验证成功返回
            echo 'success';
        } else {
            //验证失败
            echo  'fail';
        }
    }
    public function return_url()
    {
        $epay_config = $this->config();
        //计算得出通知验证结果
        $epay = new EpayCore($epay_config);
        $verify_result = $epay->verifyReturn();
        $uid = $this->user['user_id'];
        if ($verify_result) { //验证成功
            //商户订单号
            $out_trade_no = $_GET['out_trade_no'];
            //支付宝交易号
            $trade_no = $_GET['trade_no'];
            //交易状态
            $trade_status = $_GET['trade_status'];
            //支付方式
            $type = $_GET['type'];
            $payStatus = $epay->orderStatus($trade_no);
            if ($payStatus) {
                $order =  Db::name('tradeOrder')->where('out_trade_no', $out_trade_no)->find();
                if ($order['status'] == 0) {
                    // Db::name('tradeOrder')->where('out_trade_no', $out_trade_no)->update(['status' =>  1, 'trade_no' => $trade_no]);
                    $msg = '提交成功，感谢您的支持！';
                } else if ($order['status'] == 1) {
                    $msg = '无需重复提交订单';
                } else {
                    $msg = '订单不存在或已过期';
                }
            } else {
                // Db::name('tradeOrder')->where('out_trade_no', $out_trade_no)->update(['status' => 3, 'trade_no' => $trade_no]);
                $msg = '订单不存在';
            }
        } else {
            //验证失败
            $msg =   "验证失败";
        }
        return view('returnUrl', ['msg' => $msg]);
    }
    public function order()
    {
        $qpayConfig = $this->config();
        $order = input('order');
        $orderStatus = (new EpayCore($qpayConfig))->queryOrder($order);
        if ($orderStatus)  return success($orderStatus);
        else return error($orderStatus['msg']);
    }
}
